// GTY

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/HUD.h"
#include "AuraHUD.generated.h"


class USpellMenuWidgetController;
class UAttributeMenuWidgetController;
class UAbilitySystemComponent;
class UAttributeSet;
class UOverlayWidgetController;
class UAuraUserWidget;
struct FWidgetControllerParams;
/**
 * 
 */
UCLASS()
class AURAGAME_API AAuraHUD : public AHUD
{
	GENERATED_BODY()
public:
	


	UOverlayWidgetController* GetOverlayWidgetController(const FWidgetControllerParams& WCParams);
	//根据参数，查找 或 创建 并返回 OverlayWidgetController 对象

	UAttributeMenuWidgetController* GetAttributeMenuWidgetController(const FWidgetControllerParams& WCParams);
	//根据参数，查找 或 创建 并返回 AttributeMenuWidgetController 对象

	USpellMenuWidgetController* GetSpellMenuWidgetController(const FWidgetControllerParams& WCParams);



	void InitOverlay(APlayerController* PC, APlayerState* PS, UAbilitySystemComponent* ASC, UAttributeSet* AS);

private:

	UPROPERTY()
	TObjectPtr<UAuraUserWidget> OverlayWidget;
	
	UPROPERTY(EditAnywhere)
	TSubclassOf<UAuraUserWidget> OverlayWidgetClass;//TSubclassOf 是 Unreal Engine 中的一个模板类，用于存储某个类的子类引用。

	UPROPERTY()
	TObjectPtr<UOverlayWidgetController> OverlayWidgetController;//若为空由GetOverlayWidgetController创建，否则直接返回本身

	UPROPERTY(EditAnywhere)
	TSubclassOf<UOverlayWidgetController> OverlayWidgetControllerClass;//类的类指针

	UPROPERTY()
	TObjectPtr<UAttributeMenuWidgetController> AttributeMenuWidgetController;//属性菜单小部件控制器

	UPROPERTY(EditAnywhere)
	TSubclassOf<UAttributeMenuWidgetController> AttributeMenuWidgetControllerClass;//属性菜单小部件控制器的类指针

	UPROPERTY()
	TObjectPtr<USpellMenuWidgetController> SpellMenuWidgetController;

	UPROPERTY(EditAnywhere)
	TSubclassOf<USpellMenuWidgetController> SpellMenuWidgetControllerClass;

};
